Sistema de Nombrado en Java (JNDI) [Parte I]

La lecci�n Conceptos de nombrado explic� c�mo podemos usar bind(), rebind(), y createSubcontext() en el interface Context para crear uniones y subcontextos. El interface DirContext contiene versiones sobrecargadas de estos m�todos que aceptan atributos.

Podemos usar estos m�todos de DirContext para asociar atributos con el objeto en el momento en que la uni�n o el subcontexto son a�adidos al espacio de nombres. Por ejemplo, podr�amos crear un objeto Persona y unirlo al espacio de nombres y en ese mismo momento asociarle atributos sobre ese objeto Persona.

Antes de continuar: Los ejemplos de esta lecci�n requieren que hagamos adiciones al esquema. Podemos desactivar el chequeo de esquemas del servidor LDAP o a�adirle al servidor el esquema que acompa�a a este tutorial. Estas dos tareas son t�picas de un administrador de servidor de directorios. Puedes ver la lecci�n Preparaciones.

.�Crear un Contexto que tiene Atributos

Para crear un contexto que tiene atributos, le suministramos a DirContext.createSubcontext() el nombre del contexto que queremos crear y sus atributos.

// Create attributes to be associated with the new context
Attributes attrs = new BasicAttributes(true); // case-ignore
Attribute objclass = new BasicAttribute("objectclass");
objclass.add("top");
objclass.add("extensibleObject");
attrs.put(objclass);

// Create the context
Context result = ctx.createSubcontext("cn=Fruits", attrs);

Este ejemplo crea un nuevo contexto llamado "cn=Fruits" que tiene un atributo "objectclass" con dos valores, "top" y "extensibleObject", en el contexto ctx.

Si listamos el contexto ctx, veremos que ahora contiene una entrada para "cn=Fruits".

# java Create
ou=Groups: javax.naming.directory.DirContext
ou=People: javax.naming.directory.DirContext
cn=Fruits: javax.naming.directory.DirContext

.�A�adir una Uni�n que Tiene Atributos

Se usa DirContext.bind() para a�adir una uni�n que tiene atributos a un contexto. Acepta como argumentos el nombre del objeto, el objeto a unir y un conjunto de atributos.

// Create the object to be bound
Fruit fruit = new Fruit("orange");

// Create attributes to be associated with the object
Attributes attrs = new BasicAttributes(true); // case-ignore
Attribute objclass = new BasicAttribute("objectclass");
objclass.add("top");
objclass.add("extensibleObject");
attrs.put(objclass);
attrs.put("color", "orange");
attrs.put("flavor", "sweet");

// Perform bind
ctx.bind("cn=favorite, cn=Fruits", fruit, attrs);

Este ejemplo crea un objeto de la clase Fruit y lo une al nombre "cn=favorite" dentro del contexto "cn=Fruits", relativo a ctx. Esta uni�n tiene tres atributos: "objectclass", "color", y "flavor"). Si despu�s buscamos el nombre "cn=favorite, cn=Fruits" en ctx, obtendremos el objeto fruit. Si obtenemos los atributos de "cn=favorite, cn=Fruits", obtendr�amos aquellos atributos con los que se cre� el objeto. Aqu� tenemos un ejemplo de la salida.

# java Bind
orange
attribute: flavor
value: sweet
attribute: color
value: orange
attribute: objectclass
value: top
value: extensibleObject
value: javaObject
value: javaNamingReference
attribute: javaclassname
value: Fruit
attribute: javafactory
value: FruitFactory
attribute: javareferenceaddress
value: #0#fruit#orange
attribute: cn
value: favorite

Los atributos extras y los valores de los atributos mostrados aqu� se usan para almacenar informaci�n sobre el objeto (fruit). Estos atributos extras se explican en m�s detalle en la secci�n Objetos Java y el Directorio.

Si ejecutaramos este ejemplo dos veces, la segunda vez fallar�a y obtendr�amos una NameAlreadyBoundException.

Esto es porque, el nombre "cn=favorite" ya est� unido en el contexto "cn=Fruits". Para que el segundo intento tenga �xito, deber�amos usar rebind().

.�Reemplaar Uniones que tienen Atributos

Se usa DirContext.rebind() para a�adir o reemplazar una uni�n y sus atributos. Acepta los mismos argumentos que bind(). Sin embargo, la sem�ntica de rebind() requiere que el nombre ya est� unido, entonces los desune y lo vuelve a unir al objeto dado con sus atributos.

// Create the object to be bound
Fruit fruit = new Fruit("lemon");

// Create attributes to be associated with the object
Attributes attrs = new BasicAttributes(true); // case-ignore
Attribute objclass = new BasicAttribute("objectclass");
objclass.add("top");
objclass.add("extensibleObject");
attrs.put(objclass);
attrs.put("color", "yellow");
attrs.put("flavor", "sour");

// Perform bind
ctx.rebind("cn=favorite, cn=Fruits", fruit, attrs);

Cuando ejecutamos este ejemplo, reemplaza la uni�n que se cre� con el ejemplo bind().

# java Rebind
lemon
attribute: flavor
value: sour
attribute: color
value: yellow
attribute: objectclass
value: top
value: extensibleObject
value: javaObject
value: javaNamingReference
attribute: javaclassname
value: Fruit
attribute: javafactory
value: FruitFactory
attribute: javareferenceaddress
value: #0#fruit#lemon
attribute: cn
value: favorite

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
SIGUIENTE ARTÍCULO